package test3.bit;

/**
 * 169. 多数元素
 * 给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
 * 你可以假设数组是非空的，并且给定的数组总是存在多数元素。 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/majority-element
 */

public class MajorityElement {

    public static void main(String[] args) {
        int[] nums = {2, 2, 1, 1, 1, 2, 2, 1, 1, 1};
        int element = new MajorityElement().majorityElement(nums);
        System.out.println(element);
    }

    public int majorityElement(int[] nums) {
        if (nums == null || nums.length == 0) return Integer.MIN_VALUE;
        int winner = nums[0];
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            if (winner == nums[i]) count++;
            else {
                count--;
                if (count <= 0) {
                    winner = nums[i + 1];
                }
            }
        }
        return winner;
    }
}
